﻿
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- saved from url=(0014)about:internet -->
<html xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:mssdk="winsdk" xmlns:script="urn:script" xmlns:build="urn:build" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="Description" content="WdbgExts Threads and Processes"/>
<meta name="MSHAttr" content="PreferredSiteName:MSDN"/>
<meta name="MSHAttr" content="PreferredLib:/library/windows/hardware"/>
<title>WdbgExts Threads and Processes</title>

<meta name="MS-HAID" content="WdbgExts_DG_bee66511-f295-4861-8362-4a07f8a4a457.xml"/>


<link rel="STYLESHEET" type="text/css" HREF="../common/backsdk4.css"/>





<style>
html,div { margin: 0; padding: 0;}

body {
	padding: 0px;
	margin: 0px;
	overflow: auto;
	height: 100%;
}

#winchm_template_button{
	float: right;
	width: 93px;
	top: 7px;
	position: relative;
	text-align: right;
	right: 5px;
	height: auto;
}

#winchm_template_top{
	padding: 0px;
	margin: 0px;
	border-bottom: 1px solid #9B9B9B;
	background-color: #B1CEFE;
}

#winchm_template_navigation{
	margin: 0px;
	padding-top: 7px;
	padding-left: 7px;
	padding-bottom: 3px;
	padding-right: 0px;
	font-size: 8.5pt;
	font-family: Arial, Helvetica, sans-serif;
	font-weight: normal;
	color: #585858;
}

#winchm_template_title{
	margin: 0px;
	padding-top: 4px;
	padding-left: 7px;
	padding-bottom: 7px;
	padding-right: 0px;
	font-size: 18px; 
	font-family: Verdana, Geneva, sans-serif;
	color: #363636;
}

#winchm_template_content{
	margin-top: 20px;
	margin-left: 15px;
	margin-bottom: 20px;
	margin-right: 15px;
	width: auto  !important;
	width: 100%;
}

#winchm_template_footer{
	border-width: 1px;
	border-color: #B1CEFE;
	border-top-style: solid;
	margin-top: 15px;
	margin-left: 15px;
	margin-bottom: 20px;
	margin-right: 15px;
	padding-top: 7px;
	padding-left: 0px;
	padding-bottom: 0px;
	padding-right: 0px;
	font-family: arial, helvetica, sans-serif;
	font-size: 8.5pt;
	color: #696969;
	width: auto;
	text-align: left;
}


#winchm_template_container{
	margin: 0px;
	padding: 0px;
	position: static;
	padding-bottom: 3px;
	overflow: auto;
	background-color: #FFFFFF;
}


@media print
{
#winchm_template_container{
	position: static;	
	margin: 0px;
	padding: 5px;
	
	width: auto;
	height: auto;
	overflow: auto;
}
#winchm_template_button{
visibility:hidden;
}
}

#winchm_template_navigation A:link	{text-decoration: none; color:#004080}
#winchm_template_navigation A:visited  {text-decoration: none; color: #004080}
#winchm_template_navigation A:active {text-decoration: none; color: #004080 }
#winchm_template_navigation A:hover {text-decoration: none;color: #0080FF}

A:link	{text-decoration: underline; color:#0033CC}
A:visited  {text-decoration: underline; color: #0033CC}
A:active {text-decoration: underline; color: #0033CC }
A:hover {text-decoration: underline;color: #FF0000;}
</style>
<script type="text/javascript">
function isMobile(){
Agent = window.navigator.userAgent;
if (Agent.indexOf("iPhone")>=1 || Agent.indexOf("iPad")>=1 || Agent.indexOf("iPod")>=1 || Agent.indexOf("Android")>=1){
return true;
}else{
return false;	
}

}
function d_onresize(){
if (window.navigator.userAgent.indexOf("MSIE")>=1){
document.getElementById('winchm_template_container').style.pixelWidth = document.body.offsetWidth - 3;
document.getElementById('winchm_template_container').style.pixelHeight = document.body.offsetHeight - document.getElementById('winchm_template_top').offsetHeight - 4;
}
document.getElementById('winchm_template_container').style.top = document.getElementById('winchm_template_top').offsetHeight + 'px';
}

function d_onbeforeprint(){
document.getElementById('winchm_template_container').style.width = 'auto';
document.getElementById('winchm_template_container').style.height = 'auto';
}

function d_onafterprint(){
d_onresize();
}

if(!isMobile()){

window.onload = d_onresize;
window.onresize = d_onresize;
window.onbeforeprint = d_onbeforeprint;
window.onafterprint = d_onafterprint;

document.write("<style>\n");
document.write("body {overflow: hidden;}\n");
document.write("#winchm_template_container {position: absolute;overflow: auto;top : 0px;right: 0px;bottom: 0px;left: 0px;}\n");
document.write("</style>\n");
}

</script>
</head>
<body><script language="JavaScript" type="text/JavaScript">
function syn(){
if(parent.nav.tree){
 if(parent.nav.tree.loaded){
  parent.nav.tree.selectNode(1052);
 }else{
  setTimeout("syn()",500);
}
  }else{
  setTimeout("syn()",500);
  }}
if(parent!=self){
  setTimeout("syn()",100);
}else{
  parent.location.href = "../../index.htm?page=debugger/wdbgexts_threads_and_processes.htm";
}
originalOnload = window.onload;
if(originalOnload==null){
window.onload = function(){parent.contentLoaded = true;};
}else{
window.onload = function(){originalOnload();parent.contentLoaded = true;};
}
</script> 


<div id="winchm_template_top">
	<div id="winchm_template_button"><A href="wdbgexts_memory_access.htm" title="Previous topic"><img id="winchm_template_prev" alt="Previous topic" src="../template2/btn_prev_n.gif" border="0"></a><A href="wdbgexts_symbols.htm" title="Next topic"><img id="winchm_template_next" alt="Next topic" src="../template2/btn_next_n.gif" border="0"></a></div>
	<div id="winchm_template_navigation">Help &gt; 
<A href="introduction6.htm">Debugging Tools for Windows (WinDbg, KD, CDB, NTSD)</A> &gt; <A href="debugging_resources.htm">Debugging Resources</A> &gt; <A href="debugger_engine_and_extension_apis.htm">Debugger Engine and Extension APIs</A> &gt; <A href="writing_wdbgexts_extensions.htm">Writing WdbgExts Extensions</A> &gt; <A href="wdbgexts_extension_design_guide.htm">WdbgExts Extension Design Guide</A> &gt; <A href="writing_wdbgexts_extension_code.htm">Writing WdbgExts Extension Code</A> &gt; </div>
	<div id="winchm_template_title">WdbgExts Threads and Processes</div>
</div>
<div id="winchm_template_container">
	<div id="winchm_template_content"><div id="mainSection"><p>This topic provides a brief overview of how threads and processes can be manipulated using the WdbgExts API.  For an overview of threads and processes in the <a href="#Bookmark192">debugger engine</a>, see <a href="#Bookmark203">Threads and Processes</a> in the <a href="#Bookmark193">Debugger Engine Overview</a> section of this documentation.</p>
<h3><a id="threads"></a><a id="THREADS"></a>Threads</h3>
<p>To get the address of the thread environment block (TEB) that describes the current thread, use the method <a href="#Bookmark1098"><b>GetTebAddress</b></a>.  In kernel-mode debugging, the KTHREAD structure is also available to describe a thread. This structure is returned by <a href="#Bookmark1067"><b>GetCurrentThreadAddr</b></a> (in user-mode debugging, <b>GetCurrentThreadAddr</b> returns the address of the TEB).</p>
<p>The <a href="#Bookmark225">thread context</a> is the state preserved by Windows when switching threads; it is represented by the CONTEXT structure.  This structure varies with the operating system and platform and care should be taken when using the CONTEXT structure.  The thread context is returned by the <a href="#Bookmark1062"><b>GetContext</b></a> function and can be set using the <a href="#Bookmark1063"><b>SetContext</b></a> function.</p>
<p>To examine the stack trace for the current thread, use the <a href="#Bookmark1099"><b>StackTrace</b></a> function.  To temporarily change the thread used for examining the stack trace, use the <a href="#Bookmark1117"><b>SetThreadForOperation</b></a> or <a href="#Bookmark1118"><b>SetThreadForOperation64</b></a> functions.  See <a href="#Bookmark220">Examining the Stack Trace</a> in the <a href="#Bookmark204">Using the Debugger Engine API</a> section of this documentation for additional methods for examining the stack.</p>
<p>To get information about an operating system thread in the target, use the <a href="#Bookmark1075"><b>Ioctl</b></a> operation <a href="#Bookmark1084"><b>IG_GET_THREAD_OS_INFO</b></a>.</p>
<h3><a id="processes"></a><a id="PROCESSES"></a>Processes</h3>
<p>To get the address of the process environment block (PEB) that describes the current process use the method <a href="#Bookmark1093"><b>GetPebAddress</b></a>.  In kernel-mode debugging, the KPROCESS structure is also available to describe a process. This structure is returned by <a href="#Bookmark1065"><b>GetCurrentProcessAddr</b></a> (in user-mode debugging, <b>GetCurrentProcessAddr</b> returns the address of the PEB).</p>
<p>The method <a href="#Bookmark1066"><b>GetCurrentProcessHandle</b></a> returns the system handle for the current process.</p>
<h3><a id="additional_information"></a><a id="ADDITIONAL_INFORMATION"></a>Additional Information</h3>
<p>For a more powerful thread manipulation and process manipulation API, see <a href="#Bookmark221">Controlling Threads and Processes</a> in the <a href="#Bookmark204">Using the Debugger Engine API</a> section of this documentation.</p></div></div>	
	<div id="winchm_template_footer">Copyright &copy; 2019. All rights 
reserved. (To change the copyright info, just edit it in template.)</div>
</div>

</body>
</html>
